jqのYAML/XMLラッパー yq でJSONとYAMLを自在に操る
JSONをいい感じに操るおなじみのCLIツールjq。最近、YAMLを触る機会が増えてきたので同じように使えるツールはないかなぁと思っていたら、yqが使いやすかったのでご紹介します
ども、大瀧です。
JSONをいい感じに操るCLIツールjqは皆さんご存知かと思います。最近、YAMLを触る機会が増えてきたので、同じように使えるツールはないかなぁと思っていたら、jqのYAML/XMLラッパーであるyqが使いやすかったのでご紹介します。
yqとは
yqはYAMLが扱えるjqのラッパーです。jq同様の豊富なフィルタ構文でYAMLを操作できるのが特徴です。
jqを事前にインストールしておき、Python pipでインストールします。
$ pip install yq
yqの使い方
yqの入力は、標準入力ないしファイルでJSON形式とYAML形式の両方に対応します。出力はデフォルトがJSON、-y
オプションを指定してYAMLになります。フィルタなし('.'
を指定)でも、JSON-YAMLの相互変換が可能です。
{ "Samples" : [ { "name" : "satoshi", "topics" : "CV Debuted" }, { "name" : "tsumoto", "nickname" : "gyopa-" } ] }
$ yq -y '.' sample.json # JSONファイルを入力しYAMLで出力 Samples: - name: satoshi topics: CV Debuted - name: tsumoto nickname: gyopa- $
$ yq -y '.' sample.json > sample.yml # sample.ymlに保存 $ yq '.' sample.yml # YAMLファイルをJSONで出力 { "Samples": [ { "Sample1": { "name": "satoshi", "topics": "vc debuted" } }, { "Sample2": { "name": "tsumoto", "nickname": "gyopa-" } } ] } $
あとは、jqの豊富なフィルタがそのまま使えるので、抽出や置換などYAMLを煮るなり焼くなり自由に料理しちゃいましょう。
$ cat sample.yml Samples: - name: satoshi topics: CV Debuted - name: tsumoto nickname: gyopa- $ yq -y '.Samples[].name' sample.yml # nameのみ抽出 satoshi --- tsumoto ... $ yq -y '.Samples[].name |= . + "-san"' sample.yml # nameの値を置換 Samples: - name: satoshi-san topics: CV Debuted - name: tsumoto-san nickname: gyopa- $
良い感じですね。
まとめ
jqのYAMLラッパーであるyqをご紹介しました。最近YAMLファイルを扱うことが増えてきた気がするので、重宝する機会が多くなりそうですね。 ちなみに私は、AWS CLIの結果(JSON)をEmbulkの設定ファイル(YAML)にコピペするのに役立ちました。